import Notify from '@/components/prompt/prompt.js'
export default {
  install(Vue) {
    Vue.directive('focus', {
      inserted(el) {
        el.focus();
      }
    })
    // 手机号校验
    /**
     * 手机号校验方法
     * @param {HTMLElement} el - 指令绑定的元素
     * @param {Object} binding - 一个对象，包含指令的各种信息，如绑定的值、参数等
     */
    // 手机号校验指令失焦事件
    Vue.directive('phone-check', {

      inserted(el, binding) {
        const triggerType = binding.arg || 'blur'; // 默认触发方式：失焦（blur）
        const validateCallback = typeof binding.value === 'function' ? binding.value : null;
        const validate = () => {
          // 可通过 binding.value 传递配置（比如是否显示提示、空值是否校验）
          const options = typeof binding.value === 'object' ? binding.value : {};
          const { showNotify = true, allowEmpty = false } = options;

          // 调用 phoneValidate，传入配置
          const isValid = phoneValidate(el, { showNotify, allowEmpty });
s
          // 执行回调，传递校验结果
          if (validateCallback) {
            validateCallback(isValid);
          }
          // 3. 根据参数绑定对应事件（点击/失焦）
          if (triggerType.includes('blur')) {
            el.addEventListener('blur', validate); // 失焦触发
          }
          if (triggerType.includes('click')) {
            el.addEventListener('click', validate); // 点击触发
          }
          // 4. 组件销毁时移除事件，避免内存泄漏
          el._phoneCheckEvents = { validate, triggerType }; // 存储事件引用，用于后续移除
        };
      },
      unbind(el) {
        // 移除绑定的事件
        const { validate, triggerType } = el._phoneCheckEvents || {};
        if (triggerType?.includes('blur')) {
          el.removeEventListener('blur', validate);
        }
        if (triggerType?.includes('click')) {
          el.removeEventListener('click', validate);
        }
      }
    })
    // 优化后的校验函数：支持参数控制行为
    function phoneValidate(el, options = {}) {
      const { showNotify = true, allowEmpty = false } = options;
      const phone = el.value?.trim();

      // 空值处理：allowEmpty 为 true 时，空值也返回 true（不校验空值）
      if (!phone) {
        return allowEmpty;
      }

      // 格式校验
      const phoneReg = /^1[3456789]\d{9}$/;
      const isValid = phoneReg.test(phone);

      // 提示控制：showNotify 为 true 时才显示错误提示
      if (!isValid && showNotify) {
        Notify({
          message: '请输入正确的手机号（11位数字，以13/14/15/16/17/18/19开头）',
          type: 'danger'
        });
        el.value = ''; // 清空错误输入
        el.dispatchEvent(new Event('input')); // 同步 v-model
      }

      return isValid;
    }
  },

};